
package com.hd2tecnologia.modeloBanco;

import com.hd2tecnologia.banco.AcessoBanco;
import com.hd2tecnologia.entidades.Cliente;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Dulcyelliton Silva
 */
public class ClienteBD {

    private static ClienteBD instance;
    private PreparedStatement ps;
    private Connection con;
    private ResultSet rs;
    private AcessoBanco acessoBD = new AcessoBanco();
    private String consultaCliente = "select * from cliente";
    private String consultaClienteNome = "select * from cliente where cliente.nome like ?";
    private String incluiCliente = "insert into cliente (nome, endereco, bairro, cidade, uf, cep, telefone_1, email, tipo, cpf_cnpj, numero, complemento, fax, telefone_2, ie) values( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    private String alteraCliente = "update cliente set nome = ?, endereco = ?, bairro = ?, cidade = ?, uf = ?, cep = ?, telefone = ?, email = ? where cliente.id = ?";
    private String excluiCliente = "delete from cliente where cliente.id = ?";

    public List<Cliente> consultaCliente() {
        List<Cliente> listaClientes = new ArrayList<Cliente>();
        Cliente cliente;
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(consultaCliente);
            rs = ps.executeQuery();
            while (rs.next()) {
                cliente = new Cliente();
                cliente.setId(rs.getInt("id"));
                cliente.setNome(rs.getString("nome"));
                cliente.setEndereco(rs.getString("endereco"));
                cliente.setBairro(rs.getString("bairro"));
                cliente.setCidade(rs.getString("cidade"));
                cliente.setUf(rs.getString("uf"));
                cliente.setCep(rs.getString("cep"));
                cliente.setTelefone_1(rs.getString("telefone_1"));
                cliente.setEmail(rs.getString("email"));
                cliente.setTipo(rs.getInt("tipo"));
                cliente.setCpf_Cnpj(rs.getString("cpf_cnpj"));
                cliente.setNumero(rs.getString("numero"));
                cliente.setComplemento(rs.getString("complemento"));
                cliente.setFax(rs.getString("fax"));
                cliente.setTelefone_2(rs.getString("telefone_2"));
                cliente.setIe(rs.getString("ie"));
                

                listaClientes.add(cliente);
            }
            acessoBD.desconectar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listaClientes;
    }

    public List<Cliente> consultaCliente(String nome) {
        List<Cliente> listaClientes = new ArrayList<Cliente>();
        Cliente cliente;
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(consultaClienteNome);
            nome = "%" + nome + "%";
            ps.setString(1, nome);
            rs = ps.executeQuery();
            while (rs.next()) {
               cliente = new Cliente();
                cliente.setId(rs.getInt("id"));
                cliente.setNome(rs.getString("nome"));
                cliente.setEndereco(rs.getString("endereco"));
                cliente.setBairro(rs.getString("bairro"));
                cliente.setCidade(rs.getString("cidade"));
                cliente.setUf(rs.getString("uf"));
                cliente.setCep(rs.getString("cep"));
                cliente.setTelefone_1(rs.getString("telefone_1"));
                cliente.setEmail(rs.getString("email"));
                cliente.setTipo(rs.getInt("tipo"));
                cliente.setCpf_Cnpj(rs.getString("cpf_cnpj"));
                cliente.setNumero(rs.getString("numero"));
                cliente.setComplemento(rs.getString("complemento"));
                cliente.setFax(rs.getString("fax"));
                cliente.setTelefone_2(rs.getString("telefone_2"));
                cliente.setIe(rs.getString("ie"));

                listaClientes.add(cliente);
            }
            acessoBD.desconectar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listaClientes;
    }

    public boolean incluiCliente(Cliente cliente) {
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(incluiCliente);

            ps.setString(1, cliente.getNome()); 
            ps.setString(2, cliente.getEndereco()); 
            ps.setString(3, cliente.getBairro()); 
            ps.setString(4, cliente.getCidade()); 
            ps.setString(5, cliente.getUf()); 
            ps.setString(6, cliente.getCep()); 
            ps.setString(7, cliente.getTelefone_1());
            ps.setString(8, cliente.getEmail()); 
            ps.setInt(9, cliente.getTipo()); 
            ps.setString(10, cliente.getCpf_Cnpj());
            ps.setString(11, cliente.getNumero()); 
            ps.setString(12, cliente.getComplemento());
            ps.setString(13, cliente.getFax());
            ps.setString(14, cliente.getTelefone_2());
            ps.setString(15, cliente.getIe());
            
            ps.executeUpdate();

            acessoBD.desconectar();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public boolean alteraCliente(Cliente cliente) {
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(alteraCliente);

            ps.setString(1, cliente.getNome());
            ps.setString(2, cliente.getEndereco());
            ps.setString(3, cliente.getBairro());
            ps.setString(4, cliente.getCidade());
            ps.setString(5, cliente.getUf());
            ps.setString(6, cliente.getCep());
            ps.setString(7, cliente.getTelefone_1());
            ps.setString(8, cliente.getEmail());
            ps.setInt(9, cliente.getTipo());
            ps.setString(10, cliente.getCpf_Cnpj());
            ps.setString(12, cliente.getNumero());
            ps.setString(13, cliente.getComplemento());
            ps.setString(14, cliente.getFax());
            ps.setString(15, cliente.getTelefone_2());
            ps.setString(14, cliente.getIe());
            ps.setInt(9, cliente.getId());

            ps.executeUpdate();

            acessoBD.desconectar();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public boolean excluiCliente(Cliente cliente) {
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(excluiCliente);

            ps.setInt(1, cliente.getId());

            ps.executeUpdate();

            acessoBD.desconectar();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return false;
    }
    
    
    public static ClienteBD getInstance(){
        if(instance==null){
            instance = new ClienteBD();
        }
        return instance;
    }
    
    public static void kilInstance(){
        instance = null;
    }
    
}
